// 第13节：查询：find的参数使用方法

/* 
  前边已经讲了3节查询，都是在操作find方法的第一个参数（query）和第二个参数（fields）。
  find还有几个常用的参数，这些参数多用在分页和排序上。这节我们就把这些常用的选项说一说，
  理解后我们演示一个分页的效果。
*/


// find参数：
  // db.集合.find(query,fields).其他参数
  /* 
    1. - query： 这个就是查询条件，MongoDB默认的第一个参数
    2. - fields：（返回内容）查询出来后显示的结果样式，可以用true和false控制是否显示。
    3. - limit：返回的数量，后边跟数字，控制每次查询返回的结果数量。
    4. - skip:跳过多少个显示，和limit结合可以实现分页。
    5. - sort：排序方式，从小到大排序使用1，从大到小排序使用-1
  */


// 分页demo
  /* 
    明白了上面这些选项，现在可以作一个最简单的分页，我们把同事集合（collections）进行分页，每页显示两个，
    并且按照年龄从小到大的顺序排列。
  */
  db.workmate.find({},{name:1,age:1,_id:0,interest:{$slice:1}}).limit(0).skip(2).sort({age:1});



// $where修饰符
  /* 
    它是一个非常强大的修饰符，但强大的背后也意味着有风险存在。它可以让我们在条件里使用javascript的方法来进行
    复杂查询。我们先来看一个最简单的例子，现在要查询年龄大于30岁的人员。
  */
  db.workmate.find({$where:'this.age>30'},{name:1,age:1,_id:0}).sort({age:1}) //this指向的是workmage(查询集合本身)
  /* 
    结果:
    { "name" : "ShengLei", "age" : 31 }
    { "name" : "JSPang", "age" : 33 }
    { "name" : "LiuYan", "age" : 35 }
  */
  /* 
    这里的this指向的是workmate（查询集合）本身。这样我们就可以在程序中随意调用。虽然强大和灵活，但是这种查询对于数据库的压力
    和安全性都会变重，所以在工作中尽量减少$where修饰符的使用。
  */
  

